# -*- coding: utf-8 -*-
"""
完整运行指南 - 数据质量修复版本
提供测试和生产环境的完整运行命令
"""

import os
import sys
import subprocess
from datetime import datetime


def print_header():
    """打印标题"""
    print("🔧 商业地产爬虫系统 - 数据质量修复版本")
    print("=" * 60)
    print("📋 已完成的关键修复:")
    print("   ✅ 发布时间字段修复 - 获取真实发布时间")
    print("   ✅ 联系人字段优化 - 简洁准确的联系人姓名")
    print("   ✅ 数据提取精度优化 - 使用精确XPath选择器")
    print("   ✅ 30天时间过滤 - 基于真实发布时间")
    print("   ✅ CSV导出功能 - 自动生成CSV文件")
    print("=" * 60)


def check_environment():
    """检查运行环境"""
    print("\n🔍 检查运行环境...")
    
    # 检查Python版本
    python_version = sys.version_info
    if python_version.major < 3 or python_version.minor < 8:
        print(f"❌ Python版本过低: {python_version.major}.{python_version.minor}")
        print("   需要Python 3.8或更高版本")
        return False
    else:
        print(f"✅ Python版本: {python_version.major}.{python_version.minor}.{python_version.micro}")
    
    # 检查关键文件
    key_files = [
        'src/main_crawler.py',
        'src/crawler/crawler_engine.py',
        'src/crawler/page_parser.py',
        'src/utils/csv_exporter.py',
        'src/utils/date_filter.py'
    ]
    
    for file_path in key_files:
        if os.path.exists(file_path):
            print(f"✅ {file_path}")
        else:
            print(f"❌ {file_path} - 文件不存在")
            return False
    
    # 检查输出目录
    if not os.path.exists('output'):
        os.makedirs('output', exist_ok=True)
        print("✅ 创建输出目录: output/")
    else:
        print("✅ 输出目录: output/")
    
    return True


def show_test_commands():
    """显示测试命令"""
    print("\n🧪 测试命令 (验证修复效果):")
    print("-" * 40)
    
    print("1️⃣ 快速功能测试:")
    print("   python src/main_crawler.py --action test")
    print()
    
    print("2️⃣ 数据质量修复测试:")
    print("   python test_data_quality_fixes.py")
    print()
    
    print("3️⃣ 单城市单业态测试 (2页数据):")
    print("   python src/main_crawler.py --city 深圳 --business-type 餐饮 --max-pages 2")
    print()
    
    print("4️⃣ 显示浏览器窗口测试:")
    print("   python src/main_crawler.py --city 深圳 --business-type 餐饮 --max-pages 1 --show-browser")
    print()
    
    print("5️⃣ 对比修复前后效果:")
    print("   python compare_csv_files.py")


def show_production_commands():
    """显示生产环境命令"""
    print("\n🚀 生产环境命令:")
    print("-" * 40)
    
    print("1️⃣ 单城市单业态爬取:")
    print("   python src/main_crawler.py --city 深圳 --business-type 餐饮")
    print("   python src/main_crawler.py --city 杭州 --business-type 零售 --max-pages 10")
    print()
    
    print("2️⃣ 多城市多业态爬取:")
    print("   python src/main_crawler.py --action multi")
    print("   python src/main_crawler.py --action multi --cities 深圳 杭州 广州 --business-types 餐饮 零售 服装")
    print()
    
    print("3️⃣ 限制页数爬取:")
    print("   python src/main_crawler.py --city 深圳 --business-type 餐饮 --max-pages 5")
    print()
    
    print("4️⃣ 数据库摘要:")
    print("   python src/main_crawler.py --action summary")


def show_parameter_explanation():
    """显示参数说明"""
    print("\n📋 参数说明:")
    print("-" * 40)
    
    params = [
        ("--action", "执行动作", "crawl(单城市) | multi(多城市) | test(测试) | summary(摘要)"),
        ("--city", "城市名称", "深圳, 杭州, 广州等 (默认: 深圳)"),
        ("--business-type", "业态类型", "餐饮, 零售, 服装等 (默认: 餐饮)"),
        ("--cities", "多城市列表", "多个城市用空格分隔 (默认: 深圳 杭州)"),
        ("--business-types", "多业态列表", "多个业态用空格分隔 (默认: 餐饮 零售)"),
        ("--max-pages", "最大页数", "限制爬取页数，不设置则不限制"),
        ("--show-browser", "显示浏览器", "调试时显示浏览器窗口"),
        ("--headless", "无头模式", "默认启用，后台运行")
    ]
    
    for param, desc, values in params:
        print(f"   {param:<18} {desc:<12} {values}")


def show_data_quality_verification():
    """显示数据质量验证方法"""
    print("\n🔍 数据质量验证:")
    print("-" * 40)
    
    print("1️⃣ 检查CSV文件:")
    print("   - 位置: output/ 目录")
    print("   - 命名: {城市}_{业态}_{YYYYMMDD_HHMMSS}.csv")
    print("   - 字段: 标题, 联系人, 联系方式, 承受租金, 发布时间等")
    print()
    
    print("2️⃣ 验证修复效果:")
    print("   - 联系人字段: 应为简洁姓名(如'张先生')，不是大段文本")
    print("   - 发布时间字段: 应为真实发布时间，不是爬取时间")
    print("   - 数据精度: 只包含商铺招租信息，无广告等无关内容")
    print()
    
    print("3️⃣ 时间过滤验证:")
    print("   - 所有数据应在30天内")
    print("   - 过期数据会被自动过滤")
    print("   - 控制台会显示过滤统计信息")


def show_troubleshooting():
    """显示常见问题排查"""
    print("\n🔧 常见问题排查:")
    print("-" * 40)
    
    issues = [
        ("浏览器启动失败", "运行: python -m playwright install chromium"),
        ("网络超时", "已优化为90秒超时，检查网络连接"),
        ("数据量少", "检查时间过滤设置，可能数据被过滤"),
        ("联系人字段为空", "正常现象，部分数据可能没有联系人信息"),
        ("CSV文件未生成", "检查output目录权限，确保可写入"),
        ("爬取速度慢", "正常现象，包含详情页访问和数据处理")
    ]
    
    for issue, solution in issues:
        print(f"   ❓ {issue}")
        print(f"      💡 {solution}")
        print()


def run_quick_test():
    """运行快速测试"""
    print("\n🧪 运行快速测试...")
    
    try:
        # 运行数据质量修复测试
        result = subprocess.run([
            sys.executable, 'test_data_quality_fixes.py'
        ], capture_output=True, text=True, timeout=300)
        
        if result.returncode == 0:
            print("✅ 快速测试通过!")
            print("📋 测试结果:")
            print(result.stdout[-500:])  # 显示最后500个字符
        else:
            print("❌ 快速测试失败!")
            print("📋 错误信息:")
            print(result.stderr[-500:])
            
    except subprocess.TimeoutExpired:
        print("⏰ 测试超时，可能网络较慢")
    except Exception as e:
        print(f"❌ 测试执行失败: {e}")


def main():
    """主函数"""
    print_header()
    
    # 检查环境
    if not check_environment():
        print("\n❌ 环境检查失败，请修复后重试")
        return
    
    print("\n✅ 环境检查通过")
    
    # 显示各种命令和说明
    show_test_commands()
    show_production_commands()
    show_parameter_explanation()
    show_data_quality_verification()
    show_troubleshooting()
    
    # 询问是否运行快速测试
    print("\n" + "=" * 60)
    choice = input("🤔 是否运行快速测试验证修复效果? (y/N): ").strip().lower()
    
    if choice in ['y', 'yes']:
        run_quick_test()
    
    print("\n🎉 运行指南完成!")
    print("📋 建议:")
    print("   1. 先运行测试命令验证功能")
    print("   2. 确认修复效果后使用生产命令")
    print("   3. 查看output目录获取CSV文件")
    print("   4. 遇到问题参考排查方法")


if __name__ == "__main__":
    main()
